/**
 * 对Date的扩展，将 Date 转化为指定格式的String
 * 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符
 * 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
 * 例子：
 * (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 0000-00-00 00:00:0.000
 * (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 0000-0-0 0:0:0.00
 *
 * @param fmt
 * @returns {*}
 * @constructor
 */
Date.prototype.Format = function(fmt) {
    if(this.getDate() > 0) {
        var o = {
            "M+" : this.getMonth() + 1,                     // 月份
            "d+" : this.getDate(),                          // 日
            "h+" : this.getHours(),                         // 小时
            "m+" : this.getMinutes(),                       // 分
            "s+" : this.getSeconds(),                       // 秒
            "q+" : Math.floor((this.getMonth() + 3) / 3),   // 季度
            "S"  : this.getMilliseconds()                   // 毫秒
        };
        if(/(y+)/.test(fmt))
            fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for(var k in o)
            if(new RegExp("(" + k + ")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }
    else{
        return '';
    }
};

/**
 * 时间格式渲染
 * @param obj
 * @param format
 * @returns {null}
 */
$.jsonDateFormat = function(obj, format) {
    if(obj != null) {
        var date = new Date();
        date.setTime(obj.time);
        date.setHours(obj.hours);
        date.setMinutes(obj.minutes);
        date.setSeconds(obj.seconds);
        return date.Format(format);
    }
    else{
        return null;
    }
};

/**
 * POST提交数据
 * @param action
 * @param param
 */
$.submitFormPost = function (action, param, method) {
    // 创建Form
    var form = $('<form></form>');
    // 设置属性
    form.attr('action', action);
    form.attr('method', method);
    // form的target属性决定form在哪个页面提交
    // _self -> 当前页面 _blank -> 新页面
    form.attr('target', '_self');
    for(var item in param) {
        form.append('<input type="hidden" name="' + item + '" value="' + param[item] + '">');
    }
    $(document.body).append(form);
    // 提交表单
    form.submit();
    // 注意return false取消链接的默认动作
    return false;
};

/**
 *
 * @param title
 * @param message
 */
$.promptModal = function (title, message, logout) {
    if(!logout) {
        $('#prompt-title').html(title);
        $('#prompt-body').html(message);
        $('#prompt').modal({
            keyboard: true
        });
    }
    else {
        window.location.href = '/login_out.do';
    }
};

/**
 * 时间控件(双日历)
 */
$.dateRangepPicker = function () {
    //
    $('#reportrange span').html(moment().subtract('days', 6).format('YYYY-MM-DD')
        + ' - ' + moment().format('YYYY-MM-DD'));
    //
    $('#reportrange').daterangepicker({
        alwaysShowCalendars: true,                          // 显示日历
        startDate: moment().subtract('days', 6),            // 开始时间
        endDate: moment(),                                  // 结束时间
        ranges : {
            '今日': [moment().startOf('day'), moment()],
            '昨日': [moment().subtract('days', 1).startOf('day'), moment().subtract('days', 1).endOf('day')],
            '最近7日': [moment().subtract('days', 6), moment()],
            '最近30日': [moment().subtract('days', 29), moment()],
            '本月': [moment().startOf("month"),moment().endOf("month")],
            '上个月': [moment().subtract(1, "month").startOf("month"), moment().subtract(1,"month").endOf("month")]
        },
        opens : 'left',                                     // 日期选择框的弹出位置
        buttonClasses : [ 'btn btn-default' ],
        applyClass : 'btn-sm btn-success',
        cancelClass : 'btn-sm',
        format : 'YYYY-MM-DD',                              // 控件中显示的日期格式
        separator : ' - ',
        locale : {
            applyLabel : '确定',
            cancelLabel : '取消',
            fromLabel : '起始时间',
            toLabel : '结束时间',
            customRangeLabel : '自定义',
            firstDay : 1
        }
    }, function(start, end, label) {
        $('#reportrange span').html(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD'));
        $('#range_startdate').val(start);
        $('#range_enddate').val(end);
    });
};

var priceUtil = {};

priceUtil.Price = {
    UNKNOWN: -0x80000000,

    parse: function(text) {
        // Not implemented
    },

    toPriceString: function(price) {
        if (price == this.UNKNOWN){
            return '(Unknown)';
        }
        if(typeof(price) == 'number') {
            price = parseInt(price);

            var negative = price < 0;
            if(negative) {
                price = -price;
            }

            var part1 = parseInt(price / 100).toString();
            var part2 = (price % 100).toString();

            while(part2.length < 2) {
                part2 = '0' + part2;
            }
            return (negative ? '-' : '') + part1 + '.' + part2;
        }
    }
};